package com.sxy.service;

import android.app.Notification;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;

import com.example.sxy.servicedemo.MainActivity;
import com.example.sxy.servicedemo.R;
import com.example.sxy.servicedemo.ServiceInterface;

/**
 * Created by SXY on 2015/12/29.
 */
public class SimpleService extends Service {

    public static final String TAG = "Myservice";
    //    建立与activity的关联
//    private MyBinder mBinder = new MyBinder();


    //    实现aidl接口，供其他进程调用
    ServiceInterface.Stub mBinder = new ServiceInterface.Stub() {

        @Override
        public String toUpperCase(String str) throws RemoteException {
            if (str != null) {
                return str.toUpperCase();
            }
            return null;
        }

        @Override
        public int plus(int a, int b) throws RemoteException {
            return a + b;
        }
    };

    @Override
    public void onCreate() {
        super.onCreate();
        Log.d(TAG, "onCreate() executed");
        Log.d(TAG, "process id is " + android.os.Process.myPid());
//        Toast.makeText(SimpleService.this, "service start", Toast.LENGTH_LONG);
        //转换成前台应用的方法
        Intent notificationIntent = new Intent(this, MainActivity.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
                notificationIntent, 0);
        Notification notification = new Notification.Builder(this)
                .setSmallIcon(R.drawable.ic_launcher) // 设置状态栏中的小图片，尺寸一般建议在24×24，这个图片同样也是在下拉状态栏中所显示，如果在那里需要更换更大的图片，可以使用setLargeIcon(Bitmap
                        // icon)
                .setTicker("TickerText:" + "您有新短消息，请注意查收！")// 设置在status
                        // bar上显示的提示文字
                .setContentTitle("这是通知的标题")// 设置在下拉status
                        // bar后Activity，本例子中的NotififyMessage的TextView中显示的标题
                .setContentText("这是通知的内容")// TextView中显示的详细内容
                .setContentIntent(pendingIntent) // 关联PendingIntent
                .setNumber(1) // 在TextView的右方显示的数字，可放大图片看，在最右侧。这个number同时也起到一个序列号的左右，如果多个触发多个通知（同一ID），可以指定显示哪一个。
                .getNotification(); // 需要注意build()是在API level
        startForeground(1, notification);
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.d(TAG, "onStartCommand() executed");
//        如果需要线程执行相关操作
//        new Thread(new Runnable() {
//            @Override
//            public void run() {
//                // 开始执行后台任务
//            }
//        }).start();
        return super.onStartCommand(intent, flags, startId);

    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "onDestroy() executed");
    }

    //    绑定的时候返回TBinder对象
    @Override
    public IBinder onBind(Intent intent) {
        Log.d(TAG, "onBind() executed");
        return mBinder;
    }
//    当Activity退出的时候，Sercvice并不会停止，此时我们可以再进入Activity重新绑定，当这时候
//    Service就会调用onRebind()方法，但是调用onRebind()方法的前提是先前的onUnbind()方法执行成功，
//    但是使用 super.onUnbind(intent)是执行不成功的，这时候我们要手动的使其返回true，再次绑定时Rebind()就会执行。
//    否则，如果退出时不显示的指定onUnbind()为成功的话(为false)，那么重新启动此Activity来绑定服务时，
//    Service的onBind()方法和onReBind都不会执行，但是ServiceConnection方法确一定会回调了。
//    这说明在Service中的onBind()方法不同于 onStart()方法不能被重复调用

    //    简单的说，如果service没有destroy  onbind调用一次
    @Override
    public boolean onUnbind(Intent intent) {
        Log.d(TAG, "onUnbind() executed");
        boolean temp = super.onUnbind(intent);
//        如果temp =true,就会调用rebind了
//        temp=true;
        Log.d(TAG, "onUnbind() return" + temp);
        return temp;
    }

    @Override
    public void onRebind(Intent intent) {
        Log.d(TAG, "onRebind() executed");
        super.onRebind(intent);
    }

    //    声明binder对象
    public class MyBinder extends Binder {

        public void startDownload() {
            Log.d(TAG, "MyBinder : startSomething() 执行某些操作");
            // 执行具体的下载任务
        }

    }

}
